package model

import (
	"database/sql/driver"
	"encoding/json"
	"fmt"
)

// JsonScan ...
func JsonScan(dbValue interface{}, d interface{}) error {
	var bytes []byte
	switch v := dbValue.(type) {
	case string:
		bytes = []byte(v)
	case []byte:
		bytes = v
	default:
		return fmt.Errorf("invalid type for %v", dbValue)
	}

	return json.Unmarshal(bytes, d)
}

// JsonValue ...
func JsonValue(d interface{}) (driver.Value, error) {
	bytes, err := json.Marshal(d)
	if err != nil {
		return nil, err
	}

	return string(bytes), nil
}
